Nanopore 16S 全长测序分析¶
一句话说明¶
传统 16S 扩增子测序只读 V3-V4 区(约 460bp),分辨率只到属水平;Nanopore 可以读 16S 全长(~1500bp),覆盖全部 9 个可变区,分辨率直达种甚至菌株水平。
核心知识点¶
要点1:为什么 16S 全长更好¶
- 16S rRNA 基因 ~1542bp,包含 9 个可变区(V1-V9)
- 短读只测 1-2 个可变区(如 V3-V4),信息量有限
- 全长覆盖所有可变区 → 物种分辨率大幅提升
- 白话类比:用一两句话(V3-V4)识别一个人很容易认错,用完整的自我介绍(全长)就能精准识别
要点2:16S 可变区选择的困境¶
| 可变区 | 长度 | 分辨率 | 常用平台 |
|---|---|---|---|
| V1-V2 | ~300bp | 中等 | Illumina |
| V3-V4 | ~460bp | 中等(最常用) | Illumina |
| V4 | ~250bp | 一般 | Illumina |
| V1-V9 (全长) | ~1500bp | 高(种水平) | ONT / PacBio |
- 不同可变区对不同菌群的分辨率不同
- 选区偏差是传统 16S 的固有问题 → 全长测序消除这个问题
要点3:ONT 16S 全长测序特点¶
- 使用 SQK-16S114.24(ONT 官方 16S V14 化学试剂盒)或自定义引物
- 单次运行可测数万到数十万条全长 16S 序列
- R10.4+ 化学准确率 ~99%,基本满足物种鉴定
- 可以用 MinION(便携设备)在现场做微生物检测
要点4:分析工具选择¶
| 工具 | 用途 | 特点 |
|---|---|---|
| Dorado | Basecalling | ONT 官方,最新模型 |
| NanoFilt / Chopper | 质控 | 过滤低质量和短读 |
| minimap2 | 比对分类 | 比对到 SILVA/GTDB 数据库 |
| EMU | 物种丰度估计 | 基于期望最大化算法,种水平精准 |
| NanoCLUST | OTU 聚类 | 专为 Nanopore 16S 设计 |
| QIIME2 + q2-long-read | 全流程 | QIIME2 插件支持长读 |
实战代码¶
# ===== Nanopore 16S 全长分析流程 =====
# 1. Basecalling(如果使用 live basecalling 则跳过)
dorado basecaller sup \
pod5_directory/ \
--kit-name SQK-16S114.24 > basecalled.bam
# 转换为 FASTQ
samtools fastq basecalled.bam > raw_reads.fastq
# 2. 质控:过滤低质量和异常长度的读
# Nanopore 16S 应该在 1300-1600bp
chopper --quality 10 \
--minlength 1300 \
--maxlength 1600 \
--input raw_reads.fastq > filtered_reads.fastq
# 统计过滤后的数据
echo "过滤后的 reads 数:"
grep -c "^@" filtered_reads.fastq
echo "reads 长度分布:"
awk 'NR%4==2 {print length($0)}' filtered_reads.fastq | \
sort -n | \
awk 'BEGIN{print "Min\tMedian\tMax"} {a[NR]=$0} END{print a[1]"\t"a[int(NR/2)]"\t"a[NR]}'
# 3. 方法1:EMU — 种水平物种丰度估计(推荐)
# EMU 使用期望最大化算法处理 Nanopore 的错误率
emu abundance \
--db /ref/emu_database/ \
--type map-ont \
--threads 16 \
--output-dir emu_output/ \
filtered_reads.fastq
# EMU 输出:每个样本的种水平丰度表
# species_name abundance tax_id
cat emu_output/filtered_reads_rel-abundance.tsv
# 4. 方法2:minimap2 比对到 SILVA 数据库
minimap2 -a -x map-ont \
--secondary=no \
-t 16 \
/ref/SILVA_138.2_SSU_NR99.fasta \
filtered_reads.fastq | \
samtools sort -@ 8 -o silva_aligned.bam
samtools index silva_aligned.bam
# 统计比对到各物种的 reads 数
samtools idxstats silva_aligned.bam | \
sort -k3 -rn | head -20 # 前20个最丰富的物种
# 5. 方法3:使用 QIIME2 + q2-long-read 插件
# 导入数据到 QIIME2
qiime tools import \
--type 'SampleData[SequencesWithQuality]' \
--input-path manifest.csv \
--output-path reads.qza \
--input-format SingleEndFastqManifestPhred33V2
# 使用 VSEARCH 去嵌合体和聚类
qiime vsearch cluster-features-de-novo \
--i-sequences reads.qza \
--i-table feature-table.qza \
--p-perc-identity 0.99 \
--o-clustered-table clustered-table.qza \
--o-clustered-sequences clustered-seqs.qza
# 分类注释(使用 SILVA 分类器)
qiime feature-classifier classify-consensus-vsearch \
--i-query clustered-seqs.qza \
--i-reference-reads silva-138-ssu-nr99-seqs.qza \
--i-reference-taxonomy silva-138-ssu-nr99-tax.qza \
--o-classification taxonomy.qza \
--p-threads 16
# ===== R: 全长 16S 结果可视化与比较 =====
library(ggplot2)
library(dplyr)
# 读取 EMU 输出的丰度表
emu_results <- read.delim("emu_output/filtered_reads_rel-abundance.tsv")
# 按丰度排序,取 Top 15 物种
top15 <- emu_results %>%
arrange(desc(abundance)) %>%
head(15)
# 物种丰度条形图
ggplot(top15, aes(x = reorder(species, abundance), y = abundance)) +
geom_bar(stat = "identity", fill = "steelblue") +
coord_flip() + # 横向展示,方便看物种名
labs(x = "物种", y = "相对丰度 (%)",
title = "Nanopore 16S 全长:Top 15 物种") +
theme_minimal()
# 比较全长 vs V3-V4 的分辨率
# 全长结果
full_length <- data.frame(
level = c("门", "纲", "目", "科", "属", "种"),
resolution = c(99, 98, 97, 95, 92, 85)) # 示例分辨率
# V3-V4 结果
v3v4 <- data.frame(
level = c("门", "纲", "目", "科", "属", "种"),
resolution = c(99, 97, 95, 90, 80, 50)) # 种水平分辨率低
comparison <- rbind(
cbind(full_length, method = "全长 16S"),
cbind(v3v4, method = "V3-V4"))
ggplot(comparison, aes(x = level, y = resolution,
color = method, group = method)) +
geom_line(linewidth = 1.2) +
geom_point(size = 3) +
scale_x_discrete(limits = c("门","纲","目","科","属","种")) +
labs(x = "分类水平", y = "分辨率 (%)",
title = "全长 16S vs V3-V4:分类分辨率比较") +
theme_minimal()
面试常问点¶
★ Nanopore 16S 全长的错误率不会影响物种鉴定吗?¶
参考答案:这是很好的问题。Nanopore R10.4+ 化学的单读准确率约 99%(Q20),意味着每 100 个碱基可能有 1 个错误。但 16S 全长有 ~1500bp,同一物种的多条 reads 可以通过一致性纠错(如 polishing 或 EMU 的概率模型)来提高准确率。EMU 工具专门为 Nanopore 的错误模式设计了期望最大化算法,能在 ~1% 错误率下实现准确的种水平分类。实际上,全长的 1500bp 信息量远大于 V3-V4 的 460bp,即使有少量错误,物种鉴定能力仍然远优于短读扩增子。
★ 什么时候用 Nanopore 16S 全长,什么时候用 Illumina V3-V4?¶
参考答案:需要种水平分辨率、样本量不大(几十个)、需要现场检测时,选 Nanopore 全长。样本量大(几百个)、只需要属水平分辨率、追求低成本高通量时,选 Illumina V3-V4。另外如果实验室已有 Illumina 数据的历史积累,为了纵向可比性也可能继续用 Illumina。
速查卡片¶
| 问题 | 一句话答案 |
|---|---|
| 16S 全长长度 | ~1542bp |
| 可变区数量 | 9 个(V1-V9) |
| ONT 试剂盒 | SQK-16S114.24 |
| 推荐分类工具 | EMU(种水平最优) |
| 质控长度范围 | 1300-1600bp |
| 全长 vs V3-V4 核心区别 | 种级分辨率 vs 属级分辨率 |
| 比对参考数据库 | SILVA / GTDB |
| 现场检测设备 | MinION(便携) |